package com.domain.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.domain.common.AppLogger;
import com.domain.common.Const;
import com.domain.common.Result;
import com.domain.dao.PublishMapper;
import com.domain.dao.UsersMapper;
import com.domain.pojo.Publish;
import com.domain.pojo.Users;
import com.domain.pojo.UsersAddFriends;
import com.domain.service.BusinessCardService;
import com.domain.service.UsersService;
import com.domain.utils.NotNullUtils;
import com.domain.utils.UUIDUtils;
import com.domain.utils.wyyx.IMSet;
import com.domain.utils.wyyx.IMSndmsg;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class BusinessCardServiceImpl implements BusinessCardService {

    /**
     * 日志
     */
    private static Logger logger = AppLogger.getLogger(BusinessCardServiceImpl.class.getSimpleName(), Level.INFO.toString(), true);

    @Autowired
    private UsersMapper usersMapper;
    @Autowired
    private PublishMapper publishMapper;

    @Autowired
    private UsersService usersService;

    /**
     * 获取个人名片
     *
     * @param userId
     * @return
     */
    @Override
    public Result getUsersCards(String userId, String chUserId) {
        Map<String, Object> maps = new HashMap<>();
        Users user = usersMapper.selectByPrimaryKey(chUserId);
        /*获取最新一条发布帮忙*/
        List<Publish> publishs = publishMapper.selectPublishByUserId(user.getId());
        for (int i = 0; i < publishs.size(); i++) {
            if (NotNullUtils.isNotNullObject(publishs.get(0).getTitle())) {
                maps.put("publishTitle", publishs.get(0).getTitle());
            } else {
                maps.put("publishTitle", "");
            }
        }
        if (userId.equals(chUserId)) {
            //两个id相同是本人点击本人得个人标签 不能聊天
            return Result.publicResult(401, "点击自己个人标签");
        } else {
            /*判断是不是好友*/
            if (usersService.itIsUsersFriends(userId, chUserId)) {
                maps.put("isitFriends", "true");
            } else {
                maps.put("isitFriends", "false");
            }
        }
        maps.put("user", user);
        return Result.success("操作成功", maps);
    }

    /**
     * 加好友
     *
     * @param userId
     * @param friendId
     * @return
     */
    @Override
    public Result addFriends(String userId, String friendId, String groupId) throws IOException {
            /* //获取加好友用户得讨论组*/
        String msg = "";
        if (NotNullUtils.isNotNullObject(groupId)) {
            String res = IMSndmsg.queryDetailTeam(groupId, "0");
            JSONObject jsonObject = JSONObject.parseObject(res);
            msg = "来自" + jsonObject.get("tname") + "群";
            logger.info("返回得群信息" + jsonObject);
        }
            /*添加好友*/
        String rest = IMSet.addFriend(userId, friendId, "2", msg);
        //生成添加朋友记录
        UsersAddFriends friends = new UsersAddFriends();
        friends.setId(UUIDUtils.getRandomUUID());
        friends.setCreatTime(new Date());
        friends.setUsersId(userId);
        friends.setFriendsId(friendId);
        friends.setType(Const.REQUEST_FRIENDS);
        friends.setSpareOne(msg);
        return Result.success("操作成功", rest);
    }

    /**
     * 发消息
     *
     * @param userId 发送者id
     * @param ope    0：点对点个人消息，1：群消息（高级群），其他返回414
     * @param to     ope==0是表示accid即用户id，ope==1表示tid即群id
     * @param type   0 表示文本消息,
     *               1 表示图片，
     *               2 表示语音，
     *               3 表示视频，
     *               4 表示地理位置信息，
     *               6 表示文件，
     *               100 自定义消息类型（特别注意，对于未对接易盾反垃圾功能的应用，该类型的消息不会提交反垃圾系统检测）
     * @param body   发送得内容最大长度5000字符，为一个JSON串
     * @return
     */
    @Override
    public Result sendMessage(String userId, String ope, String to, String type, String body) throws IOException {
        String result = IMSndmsg.sendMsg(userId, ope, to, type, body);
        return Result.success(result);
    }


}
